home *** CD-ROM | disk | FTP | other *** search
/ The AGA Experience 2 / agavol2.iso / software / utilities / emulation / zxam spectrum / zxam_rexx / english / explodetap.zxam < prev    next >
Text File  |  1995-07-31  |  2KB  |  89 lines

  1. /* this script discompose a .TAP file in the corresponding .header and */
  2. /* .bytes files, and place them in the selected directory */
  3.  
  4.     /* check if the emulator is present */
  5.     address command
  6.     
  7.     if ~show(ports,ZXAM_REXX) then do
  8.         requestchoice '>nil: title "ZXAM Script error..." body "I can't find the emulator's port!!" gadgets "AARGH!"'
  9.         exit
  10.         end
  11.     
  12.     /* old window parameters */
  13.     oldname=zxamactname()
  14.     oldformat=zxamactformat()
  15.     oldsaveformat=zxamactsaveformat()
  16.     
  17.     /* what file must convert? */
  18.     'requestfile >t:zxamexplodetap.tmp "'zxamactloadpath()'" title "Select the .TAP file..." pattern "#?.TAP"'
  19.     name=zxampploadfile('t:zxamexplodetap.tmp')
  20.     name=left(name,length(name)-1) /* delete the LF */
  21.     
  22.     /* destination directory */
  23.     'requestfile >t:zxamexplodetap.tmp "'zxamactsavepath()'" drawersonly savemode'
  24.     destdrawer=zxampploadfile('t:zxamexplodetap.tmp')
  25.     destdrawer=strip(left(destdrawer,length(destdrawer)-1),'B','"') /* delete LF and " */
  26.     
  27.     if name='' then exit
  28.         
  29.     ZXAMEnableAbort()        /* enable the Abort ARexx gadget */
  30.     
  31.     name=strip(left(name,pos('"',name,2)),'B','"') /* no " */
  32.     
  33.     /* delete the extension of filename */
  34.     namenoext=zxamfilepart(name)
  35.     if lastpos('.',namenoext)~=0 then namenoext=left(namenoext,lastpos('.',namenoext)-1)
  36.     
  37.     /* open the .TAP file */
  38.     if ~open('fichero',name,'R') then signal cleanup
  39.     
  40.     
  41.     counter=0
  42.     
  43.     zxamnameformat('Processing "'zxamfilepart(name)'"','Wait...')
  44.     
  45.     /* discompose the file */
  46.     do forever
  47.     
  48.     if ZXAMReadAbort() then signal cleanup2
  49.     
  50.     dummy=readch('fichero',2)    /* read two bytes */
  51.     if dummy='' then signal cleanup2
  52.     
  53.     longblock=c2d(reverse(dummy)) /* inverted Z80 format */
  54.     
  55.     block=readch('fichero',longblock)  /* read the data block */
  56.     
  57.     defext='.bytes'
  58.     
  59.     /* is it a header? */
  60.     if ((longblock=19)&(left(block,1)='00'x)) then defext='.header'
  61.     
  62.     /* save the data */
  63.     
  64.     newname=namenoext''counter''defext
  65.     
  66.     if ~open('fichero2',zxamjoinpathname(destdrawer,newname),'W') then signal cleanup2
  67.     
  68.     dummy=writech('fichero2',block)
  69.     
  70.     dummy=close('fichero2')
  71.  
  72.     if ~((longblock=19)&(left(block,1)='00'x)) then counter=counter+1
  73.  
  74.     end
  75.     
  76.     
  77. cleanup2:    
  78.     dummy=close('fichero')
  79.     
  80. cleanup:
  81.     if oldname='' then
  82.         zxamclearnameformat()
  83.     else
  84.         zxamnameformat(oldname,oldformat)
  85.  
  86.     zxamsaveformat(oldsaveformat)
  87.     
  88.     exit
  89.